<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 1- create函数是Object对象下。
	// 2- 接收的第一个参数是对象，第二个参数也是一个对象（描述对象）
	// 3- 第一个参数（对象）会作为返回值的原型对象，描述对象可以对属性进行描述
	// 4- 返回一个新的对象
	// 5- get set不允许与value以及writable结合使用。
	// 一- 定义全局变量作为中间值
	// var _userName = null;
	// var obj = Object.create({},{
	// 	userName:{
	// 		// 初始值
	// 		// value:"zhangsan",
	// 		// 允许修改
	// 		// writable:true,
	// 		enumerable:true,
	// 		configurable:true,
	// 		// 读:返回值即是该属性的值
	// 		get:function(){
	// 			// console.log("get");
	// 			return _userName;
	// 		},
	// 		// 写:当修改数据时会执行
	// 		set:function(v){
	// 			// console.log("set",v)
	// 			_userName = v;
	// 		}
	//
	// 	}
	// });
	
	// 二- 通过原型对象
	var obj = Object.create({_userName:null},{
		userName:{
			// 初始值
			// value:"zhangsan",
			// 允许修改
			// writable:true,
			enumerable:true,
			configurable:true,
			// 读:返回值即是该属性的值
			get:function(){
				// this指向的是Object.create的返回值（obj)
				// console.log("get",this===obj);
				return this._userName;
			},
			// 写:当修改数据时会执行
			set:function(v){
				// console.log("set",v)
				// _userName = v;
				this.__proto__._userName = v;
				
			}
			
		}
	});
	// 写
	obj.userName = "wangwu";
	// 读
	console.log(obj.userName);
	var userName = obj.userName;
	console.log(userName);
	function fn(userName){
		console.log(userName)
	}
	fn(obj.userName);
	
	
</script>
</html>